package com.zw.transition.mapper;

import com.zw.transition.entity.*;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * @Description:
 * @Author: China.sgl
 * @Date: 2019/9/16 09:11
 */
public interface FlowMapper {


    List<FlowRoute> findApplyList(QrParse parse);

    List<FlowRoute> findCompleteApplyList(QrParse parse);

    List<FlowRoute> findCompleteApplyList1(QrParse parse);

    List<FlowRoute> findCompleteApplyList2(QrParse parse);

    List<FlowModel> findRecList(QrParse parse);

    List<FlowModel> findCheckList(QrParse parse);

    FlowSheet findSheet(QrParse parse);

    List<FlowModel> findHisApplyList(String code);

    List<FlowModel> findHisRecList(String code);

    List<FlowModel> findHisCheckList(String code);

    int addTrans(FlowTrans trans);

    int updateRouteApply(FlowRoute route);

    int updateRouteApplyToCancelApply(FlowRoute route);

    FlowTrans getTrans(Integer id);

    int updateRecTrans(FlowTrans trans);

    FlowRoute findNextRoute(FlowRoute route);

    FlowRoute getNextRoute(FlowRoute route);

    int updateRouteRecNum(FlowRoute route);

    FlowRoute findCurRoute(FlowTrans trans);

    int updateCheckTrans(FlowTrans trans);

    int updateRouteCheck(FlowRoute cur);

    int updateRejectTrans(FlowTrans t);

    FlowSheet getSheet(FlowRoute route);

    int updateSheetInvalid(FlowSheet sheet);

    int insertHalfStore(HalfStore store);

    int updateTransStatus(@Param("id") Integer id, @Param("status") Integer status);

    int updateTransIsdel(@Param("id") Integer id, @Param("isDel") Integer isDel);

    int updateRouteDel(FlowRoute route);

    int delHalfStore(Integer id);

    /**
     * @methodName: findNextRouteByDump
     * @description: 获取转储
     * @param: cur
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/16 13:15
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute findNextRouteByDump(FlowRoute cur);

    /**
     * @methodName: getFirstRoute
     * @description: 获取第一道序
     * @param: cur
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/16 13:43
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute getFirstRoute(FlowRoute cur);

    /**
     * @methodName: getLastRoute
     * @description: 获取最后一道序
     * @param: cur
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/16 13:56
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute getLastRoute(FlowRoute cur);

    /**
     * @methodName: getFlowRouteByPeimaryKey
     * @description: 根据主键获取路线
     * @param: id
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/21 13:34
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute getFlowRouteByPrimaryKey(Integer id);

    /**
     * @methodName: deleteTrans
     * @description: TODO
     * @param: trans
     * @return： void
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/24 11:27
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    int deleteTrans(FlowTrans trans);

    /**
     * @methodName: getNextFlowRouteByBefore
     * @description: 根据上序获取下序
     * @param: currentFlowRoute
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/24 13:39
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute getNextFlowRouteByBefore(FlowRoute currentFlowRoute);

    /**
     * @methodName: getExistHalfStore
     * @description: 获取已存在的
     * @param: store
     * @return： com.zw.transition.entity.HalfStore
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/29 15:49
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    HalfStore getExistHalfStore(HalfStore store);

    /**
     * @methodName: updateHalfStoreDrawNumByPrimary
     * @description: 修改数量
     * @param: existHalfStore
     * @return： int
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/29 15:50
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    int updateHalfStoreNumByPrimary(HalfStore existHalfStore);

    /**
     * @methodName: updateHalfStoreDrawNumByPrimary
     * @description: 修改数量
     * @param: existHalfStore
     * @return： int
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/29 15:50
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    void insertAsseHalfStoreRecord(AsseHalfStoreRecord record);

    /**
     * @methodName: getAsseHalfStoreRecordByPrimaryKey
     * @description: 获取对应的记录
     * @param: recordId
     * @return： com.zw.transition.entity.AsseHalfStoreRecord
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/29 15:57
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    AsseHalfStoreRecord getAsseHalfStoreRecordByPrimaryKey(Integer recordId);

    /**
     * @methodName: getHalfStore
     * @description: 获取库存
     * @param: record
     * @return： com.zw.transition.entity.HalfStore
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/4/29 15:58
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    HalfStore getHalfStore(AsseHalfStoreRecord record);

    /**
     * @methodName: updateRouteRouteDate
     * @description: 更新最新转序时间
     * @param: next
     * @return： int
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/5/12 16:09
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    int updateRouteRouteDate(FlowRoute next);

    /**
     * @methodName: getFirstFlowTransBySheetId
     * @description: 获取首道序的转序单
     * @param: sheetId
     * @return： com.zw.transition.entity.FlowTrans
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/5/21 13:02
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowTrans getFirstFlowTransBySheetId(@Param("sheetId") Integer sheetId);

    /**
     * @methodName: getFirstFlowRouteBySheetId
     * @description: 获取第一道序
     * @param: sheetId
     * @return： com.zw.transition.entity.FlowRoute
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/5/21 13:10
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    FlowRoute getFirstFlowRouteBySheetId(@Param("sheetId") Integer sheetId);

    /**
     * @methodName: updateRoute
     * @description: 更新路线
     * @param: next
     * @return： int
     * @exception：
     * @author： 徐一贺 tel:18341916590
     * @designer： 陈欣
     * @leader： 陈欣 tel:18104194240
     * @date： 2021/5/28 11:08
     * @office: 智能控制设计科
     * @research institute： 智能控制设计所
     * @department： 机械设计院
     * @company: 辽宁忠旺机械设备制造有限公司
     * @group： 忠旺集团
     * @version: 1.0
     */
    int updateRoute(FlowRoute next);

    /**
     * 获取该序数量
     *
     * @param route
     * @param prodNo
     * @return
     */
    int getRoteCountBySheetId(@Param("route") String route,@Param("prodNo") String prodNo);

    /**
     * 获取该序完成数量
     *
     * @param route
     * @param prodNo
     * @return
     */
    int getRoteCompleteCountBySheetId(@Param("route") String route,@Param("prodNo") String prodNo);

    /**
     * 获取开始时间
     *
     * @param prodNo
     * @param protCod
     * @return
     */
    Date getDataBaseStartDate(@Param("prodNo") String prodNo, @Param("protCod") String protCod);

    /**
     * 更改开始时间
     *
     * @param prodNo
     * @param protCod
     * @param startDate
     */
    int updateTaskStatusAndStartDat(@Param("prodNo") String prodNo,
                                     @Param("protCod") String protCod,
                                     @Param("protStaDat") Date startDate,
                                     @Param("protDepId") Integer protDepId,
                                     @Param("protUsrId") Integer protUsrId);

    /**
     * 更改结束时间
     * @param prodNo
     * @param protCod
     * @param endDate
     * @param protDepId
     * @param protUsrId
     */
    int updateTaskStatusAndEndDat(@Param("prodNo") String prodNo,
                                   @Param("protCod") String protCod,
                                   @Param("protEndDat") Date endDate,
                                   @Param("protDepId") Integer protDepId,
                                   @Param("protUsrId") Integer protUsrId);

    /**
     * 更改反馈结束时间
     * @param prodNo
     * @param prprCod
     * @param prprRetDat
     * @param prprDepId
     * @param prprRetUsrId
     * @return
     */
    int updateReturnEndDate(@Param("prodNo") String prodNo,
                            @Param("prprCod") String prprCod,
                            @Param("prprRetDat") Date prprRetDat,
                            @Param("prprDepId") Integer prprDepId,
                            @Param("prprRetUsrId") Integer prprRetUsrId);

    /**
     * 获取总数量
     * @param sheet
     * @return
     */
    int getLastRouteTotalCount(FlowSheet sheet);

    /**
     * 获取完成的总数量
     * @param sheet
     * @return
     */
    int getLastRouteTotalFinishedCount(FlowSheet sheet);

    /**
     * 依据主键获取用户表
     * @param id
     * @return
     */
    User getUserById(Integer id);
    /**
     * 依据主键修改下料状态
     * @param flowSheet
     * @return
     */
    int updateFlowSheetCutStatusByPrimary(FlowSheet flowSheet);
}
